Trong Ruby, việc gọi một phương thức không phải là một cú nhảy tĩnh đến địa chỉ bộ nhớ; nó là một sự kiện truyền tin nhắn động. Khi bạn gọi một phương thức, bạn đang gửi một thông điệp đến một người nhận. Thông điệp này bao gồm tên phương thức, các đối số tùy chọn, và một khả năng kết hợp khối.
1. Cú pháp gọi và sự mơ hồ
Ruby cho phép độ linh hoạt cao: Foo.Bar và Foo.Bar() là giống nhau. Tuy nhiên, Foo::Bar thường ám chỉ một hằng số, trong khi Foo::Bar() bắt buộc phải gọi phương thức. Dấu ngoặc thường bị bỏ qua để tạo ra trải nghiệm tương tự DSL, nơi các phương thức trông như thuộc tính.
2. Phân tích toán tử
Các toán tử thực chất là các phương thức có thể tái định nghĩa. Biểu thức expr1 + expr2 là dạng viết tắt của (expr1).+(expr2). Điều này áp dụng cho toán tử đơn (-obj), toán tử nhị phân (a < b), và toán tử hậu tố.
3. Cơ chế yield
Các phương thức sử dụng yield để đẩy luồng điều khiển vào khối liên quan. Sử dụng Kernel.block_given?, một phương thức có thể quyết định động cách xử lý logic dựa trên ngữ cảnh gọi.